package main

import (
	"fmt"
	"strconv"
)

// 402. 移掉 K 位数字
func main() {
	num := "1432219"
	k := 3
	s := removeK(num, k)
	println(s)

}

func removeK(num string, k int) string { // 不完全对
	// 构造入栈队列
	var stack []rune

	for _, n := range num {
		for k > 0 && len(stack) > 0 && stack[len(stack)-1] > n {
			_, stack = stack[len(stack)-1], stack[:len(stack)-1]
			k--
		}
		stack = append(stack, n)
	}

	for k > 0 {
		stack = stack[:len(stack)-1]
		k--
	}

	resNum, _ := strconv.Atoi(string(stack))

	return fmt.Sprintf("%v", resNum)
}

// 给你一个以字符串表示的非负整数 num 和一个整数 k ，移除这个数中的 k 位数字，使得剩下的数字最小。请你以字符串形式返回这个最小的数字。
//
//示例 1 ：
//
//输入：num = "1432219", k = 3
//输出："1219"
//解释：移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。
//示例 2 ：
//
//输入：num = "10200", k = 1
//输出："200"
//解释：移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
//示例 3 ：
//
//输入：num = "10", k = 2
//输出："0"
//解释：从原数字移除所有的数字，剩余为空就是 0 。
//
//提示：
//
//1 <= k <= num.length <= 105
//num 仅由若干位数字（0 - 9）组成
//除了 0 本身之外，num 不含任何前导零
